package fr.ajicommerce.core.dao.implementation;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.Query;

import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import fr.ajicommerce.core.dao.generics.GenericDAO;
import fr.ajicommerce.core.dao.interfaces.IProduitDAO;
import fr.ajicommerce.core.entities.Produit;

@Component("produitDAO")
@Transactional
public class ProduitDAO extends GenericDAO<Produit, Long> implements
		IProduitDAO {

	public ProduitDAO(Class<Produit> entityClass) {
		super(entityClass);
	}

	public ProduitDAO() {
		super(Produit.class);
	}

	@Override
	public Produit findProduitByReference(String reference) {

		Map<String, Object> parameters = new HashMap<>();
		parameters.put("reference", "%"+reference+"%");

		return super.findOneResult(Produit.FIND_BY_REFERENCE, parameters);
	}

	@Override
	public Produit findProduitByLabel(String label) {

		Map<String, Object> parameters = new HashMap<>();
		parameters.put("label", "%"+label+"%");

		return super.findOneResult(Produit.FIND_BY_LABEL, parameters);
	}

	@Override
	public List<Produit> findProduitsByThisReference(String reference) {
		List<Produit> listeProduits = null;

		try {
			Query query = em.createNamedQuery(Produit.FIND_PRODUITS_BY_THIS_REFERENCE);
			query.setParameter("reference", "%" + reference + "%");
			
			listeProduits = query.getResultList();
			

			} catch (Exception e) {
			 
				e.printStackTrace();
			}
			
			return listeProduits;
	}

	@Override
	public List<Produit> findProduitsByThisLabel(String label) {
		List<Produit> listeProduits = null;

		try {
			Query query = em.createNamedQuery(Produit.FIND_PRODUITS_BY_THIS_LABEL);
			
			query.setParameter("label","%" +  label + "%");
			
			listeProduits = query.getResultList();
			

			} catch (Exception e) {
			 
				e.printStackTrace();
			}

			return listeProduits;
	}

	@Override
	public Produit findProduitByStrictReference(String reference) {

		Map<String, Object> parameters = new HashMap<>();
		parameters.put("reference", reference);

		return super.findOneResult(Produit.FIND_BY_REFERENCE, parameters);
	}

}
